iT邦幫忙

2026 iThome 鐵人賽

DAY 1
0
Software Development

30天打造一套企業PLM系列 第 1

Day 1:為什麼要自己打造企業 PLM?

  • 分享至 

  • xImage
  •  

https://ithelp.ithome.com.tw/upload/images/20260818/20161290yATlPV31qq.jpg

系列:30 天打造企業級 PLM:從動態表單、簽核引擎到 Agile 資料遷移

一封來自原廠的「分手信」

每年收到 Agile 維護費續約單的時候,心情都很複雜。金額年年往上調,但我們對系統做的事十年如一日:開料號、發變更單、簽核、放行。系統異常?請開 SR、請顧問評估、請等報價單,通常要好幾個月才有辦法處理。

然後,2023 年 10 月,Oracle 送來了正式的分手信:

  • Agile PLM 走到生命週期終點。原本規劃中的 9.3.7 從 roadmap 上悄悄消失,9.3.6 成為最後一個版本。
  • Premier Support 將於 2027 年 12 月 31 日結束,之後進入 Sustaining Support:沒有新 patch、沒有安全性修補、沒有重大 bug 修復。翻成白話:「你可以繼續用,但出事自己扛。」
  • Oracle 給的官方答案是:請遷移到 Oracle Fusion Cloud PLM。

消息傳開後,第一個跳出來的不是技術問題,是老闆的問題:「要換系統嗎?要花多少錢?」

攤開選項,每一條路都讓人直冒冷汗:

  1. 跟著上 Oracle 雲端:從「買斷 + 維護費」變成「永遠的訂閱制」,而且那些長在舊系統上的客製,要自己重新開發。
  2. 換一套商用 PLM(Aras、Windchill、Teamcenter……):授權費加導入顧問費最少也是千萬起跳,然後把「被 Oracle 綁架」換成「被另一家綁架」,十年後可能再收一次分手信。
  3. 繼續撐著不動:2027 年之後,每一個資安稽核季度都要跟稽核人員解釋為什麼核心系統跑在一套沒有安全修補的軟體上。

要嘛付錢、要嘛付更多錢、要嘛提心吊膽。還是——
自己打造一套。

憑什麼敢?先自我介紹一下

說出「自己打造一套」之前,先交代我的經歷。凱文大叔接觸 PLM 的時間比寫 Java 還久,整個工作生涯幾乎都圍著 PLM 打轉:從導入、管理到客製整合,這套系統的每個角落我都摸過。

這種資歷的優勢是我很清楚 PLM 的骨架長什麼樣。哪些功能是真正的核心、哪些是行銷簡報上的包裝;使用者每天卡在哪一步、管理員最怕動哪個設定。這些讀文件讀不來,是經年累月累積出來的。

所以「自建 PLM」這個念頭,對沒經驗的人來說失敗率非常高;對我來說,是把累積了大半輩子的 domain know-how 換一種形式寫下來,從「操作別人的系統」變成「打造自己的系統」。敢的底氣不在技術多強,在於對這個領域夠熟。技術可以邊做邊學,領域理解沒辦法速成,而 PLM 恰好是領域理解占七成的那種系統。

盤點需求:我們其實沒有想像中需要那麼多

「自己做」聽起來很熱血,但衝動之前得先誠實回答一個問題:這十幾年來,我們到底用了 Agile 的哪些功能?於是我們把功能清單攤開來,問使用者「這功能有在用嗎」,結果如下:

經常使用 幾乎沒用過
料號(Item)與版本管理 CAD 整合與 3D Viewer
BOM 結構與多階展開 PPM(專案組合管理)
變更單(ECR/ECO/ECN)簽核流程 PQM(品質管理)大部分模組
附件檔案管理 PG&C(禁用物質管理)
動態擴充欄位(Detail Page) 各種買了沒開的模組授權

關鍵在右邊那一欄,尤其是 Viewer。商用 PLM 授權費裡很大一塊是為 CAD 整合與 3D 視覺化買單,但很多企業的設計檔案走的是另一套系統,工程師要看圖自然會去開 CAD,從來沒有人在 PLM 裡轉過 3D 模型。PLM 這端真正的需求只有「把檔案掛在料號上、簽核時看得到、稽核時有記錄」。說白了,我們付了一整套瑞士刀的錢,實際只用了開瓶器,而且每年還在為那些沒打開過的刀片繳保養費。

把需求收斂之後,剩下的核心其實不多:

  1. 料號與版本的生命週期管理
  2. BOM 結構維護與展開
  3. 可設定的表單與簽核流程引擎
  4. 動態欄位,不改程式就能加欄位

這四件事,沒有一件是做不出來的。於是這個系列的主角 Mini-PLM 誕生了。

從 0 打造企業系統,不是不可能

先講結論:可行。做完之後系統長這樣:

項目 規模
後端 Java 約 83,000 行 / 689 個檔案
前端 TypeScript 約 77,000 行 / 258 個檔案
資料庫 84 張業務資料表(68 個 JPA Entity + 關聯表)

技術選型先列個總覽,Day 2 起逐一展開:

  • 後端:Spring Boot + Spring Security(JWT stateless + LDAP)+ JPA + Flyway,同時支援 PostgreSQL 與 Oracle
  • 前端:React 19 + Ant Design ProComponents + Zustand + Vite
  • 部署:單一產物交付(Single Artifact),前端 build 產物直接納入後端 static 靜態資源目錄由 Spring Boot 統一託管,零 CORS 問題、部署極簡
  • 測試:JUnit + Playwright E2E + 壓測腳本(250 VU 實測過)

還有一個十年前不存在的關鍵變數:AI Coding。這套系統的開發後期加入 AI 協作,最有感的一次,是把 Form 與流程的設定介面從傳統表格改成 Canva 式的拖拉視覺化設計器。放在以前這是要排一整季的功能,實際只花不到一周。「小團隊自建企業系統」這個命題,因為 AI 的出現,可行性和十年前完全是兩回事。

但是——隱藏的技術細節會讓你很崩潰

這個系列不是「30 天速成,人人都能做 PLM」的勵志文。恰恰相反,我想花 30 天講清楚的是:企業系統的難點很少落在 CRUD,真正的坑是那些沒踩過就不知道的細節。它們共同的特徵是出事的地方和真正的病灶,往往隔了十萬八千里。先預告後面幾天會展開的血淚現場:

  • (Day 2)開發環境好好的,上線白畫面:Vite vendor chunk 想拆細一點讓快取更有效率,本機 dev server 毫無異狀,部署到生產環境使用者打開只有一片白。chunk 循環依賴只在 build 產物上發作,而第一個發現的人永遠是使用者
  • (Day 6)授權規則表越長,越沒人敢動:Spring Security 的 path 權限一條一條加,加到後來連自己都看不出「這個人到底能做什麼」,每次改都怕弄壞別條規則。最後痛定思痛,path 層只分「admin 與其他」兩級,細部權限全部改走自訂 Privilege 機制,前端再依權限決定功能鍵要不要長出來,把複雜度變成單一可設定觀測的 RBAC 架構
  • (Day 7)「我明明刪掉了,為什麼不能再建同一個名字?」:軟刪除的列在畫面上消失了,但它還躺在資料表裡佔著唯一鍵,使用者重建同名資料永遠撞 409。刪除「看起來成功」和「真的讓路」是兩回事
  • (Day 8)沒權限看的欄位,API 該傳什麼?三條路都是坑:不傳,前端表單結構缺一塊直接歪掉;傳 null,使用者一存檔就把別人的資料蓋掉;原值照傳,權限形同虛設。這個傳輸層的權限設計沒想清楚,動態表單就是個資料外洩器
  • (Day 8)「我的 Item Type 不見了!」:使用者回報型態消失,我們找了半天型態設定,最後發現真正被清空的是登入者自己的帳號資料。@CreatedBy 關聯上多掛了一個 cascade,每存一次表單就把審計欄位的空殼物件 merge 回帳號表。症狀在東邊,病灶在西邊
  • (Day 12)自動加簽永遠「找不到人」:log 明明印出執行成功,簽核名單就是沒多出半個人。追到最後,凶手是 trigger 上的 @Transactional(REQUIRES_NEW)。它開了一個新交易,自然讀不到「上一關剛簽完、還沒 commit」的紀錄。差一個註解參數,行為天差地遠,而且測試環境單步操作根本重現不了
  • (Day 19)「我明明把權限開給他了!」:管理員更新了選單和權限,使用者那邊卻還是舊畫面。前端快取住的 meta 沒失效、選單樹沒重抓,使用者只能被教育成「遇到怪事就重新整理」。最後用 SSE 事件通知讓後端主動告訴前端「該刷新了」,才把這個支援電話常客送走
  • (Day 21–22)「系統最近怪怪的、變慢了」:上線後最常聽到的回報就這一句。但變慢是哪支 API?從哪天開始?尖峰還是全天?沒有效能偵測,這些問題全都答不出來,只能遠端連進去大海撈針。壓力測試也是同一課:沒壓過 250 個併發使用者,你不會知道連線池、執行緒、快取哪個先倒。上線前用壓測找出斷崖,上線後靠效能樣本與 Top SQL 讓系統自己說話
  • (Day 23–24)對舊系統的資料考古:要把十幾年的資料搬出來,卻發現沒有完整的 schema 文件,當年知道細節的人也不在了。只能從 UI 反推資料表、抽樣驗證、跟系統對帳,一層層挖出真相

每一條都是實際發生、實際除錯、實際上線驗證過的。這些細節不會出現在任何框架的 Getting Started 裡,但它們才是「企業系統」與「範例專案」的分水嶺。

30 天路線圖

週次 主題
第 1 週(Day 1–5) 技術選型、建置管線、領域模型設計、Metadata-driven、API 設計
第 2 週(Day 6–12) JWT/LDAP 認證授權、動態表單、簽核引擎、Trigger 規則引擎與交易
第 3 週(Day 13–19) 版本機制、BOM 演算法、Redline、進階搜尋、前端架構、SSE 即時通知
第 4 週(Day 20–22) Playwright E2E、壓測調校、監控維運
Migration(Day 23–24) 舊系統資料遷移:策略、考古與匯出工具
進階主題(Day 25–28) 檔案管理、批次匯入、雙資料庫支援、資安強化
收尾(Day 29–30) 部署上線、總結與踩坑排行榜

小結

Oracle Agile 的落日給了我們一個被迫重新思考的機會。當你真正盤點需求,會發現商用 PLM 裡你需要的那 50%,是一個小團隊做得出來的;而做出來的過程中埋的坑,就是這 30 天要講的故事。

明天 Day 2,從最基礎的問題開始:Monorepo 與建置管線——前後端解耦開發、單一產物打包,如何用一個 repo 管好兩個世界?


參考資料


下一篇
Day 2:Monorepo 與建置管線——前後端解耦開發、靜態資源打包,如何用一個 repo 管好兩個世界?
系列文
30天打造一套企業PLM4
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

1 則留言

1
Wolke
iT邦研究生 4 級 ‧ 2026-08-19 10:11:28

那封 Oracle 的分手信很有衝擊,2027 之後只剩 Sustaining Support、出事自己扛,聽起來真的像把核心系統推到懸崖邊;你把 Agile 十年來其實只用到料號、BOM、變更單和動態欄位這幾塊攤開來看,瑞士刀只拿開瓶器那段超有畫面。還有 AI Coding 讓原本要排一季的拖拉式設計器不到一週就長出來,這種把企業 PLM 自己做起來的路線,讀完也讓我想到自己最近在整理實作經驗。我手邊有多的 Lovable 額度想送給有緣人,有興趣可從連結看看我的系列。 https://ithelp.ithome.com.tw/articles/10401174

我要留言

立即登入留言